package everyday;

import java.util.Stack;

/**
 * @author zhangmin
 * @create 2022-05-05 9:32
 * 剑指 Offer 30. 包含min函数的栈
 * 定义栈的数据结构，请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中，调用 min、push 及 pop 的时间复杂度都是 O(1)。
 */
public class MinStack {
    int min;
    Stack<Integer> stack=new Stack<>();
    public MinStack() {
        min=Integer.MAX_VALUE;
    }

    public void push(int x) {
        if (x<=min){
            //需要更新min，先将min放入栈中
            stack.push(min);
            min=x;
        }
        stack.push(x);
    }

    public void pop() {
        //如果pop出来的栈顶元素是min，则需要再pop一下得到新的最小值
        if (stack.pop()==min){
            min=stack.pop();
        }
    }

    public int top() {
        return stack.peek();
    }

    public int min() {
        return min;
    }
}
